
[dbo].[amsp_CMDeleteNavMenu]
CREATE PROCEDURE amsp_CMDeleteNavMenu
@InNavMenuID numeric,
@InContactID numeric,
@InIgnorePrivilege char(1) = 'N',
@OutErrorMessage varchar(255) OUTPUT
AS
BEGIN
DECLARE
@ContentID numeric,
@WebsiteKey uniqueidentifier,
@ParentNavMenuID numeric,
@UnAuthorizedNum numeric,
@NavMenuID numeric,
@ContentCount int
CREATE TABLE #NavMenuToDelete
(NavMenuID numeric,
ContentCount numeric,
ContentAuthorityGroupID numeric,
SortOrder numeric(28,18))
INSERT INTO #NavMenuToDelete
SELECT a.NavMenuID,
0,
a.ContentAuthorityGroupID,
a.SortOrder
FROM Nav_Menu a WITH (NOLOCK)
WHERE a.NavMenuID = @InNavMenuID
WHILE @@RowCount > 0 BEGIN
INSERT INTO #NavMenuToDelete
SELECT a.NavMenuID,
0,
a.ContentAuthorityGroupID,
a.SortOrder
FROM Nav_Menu a WITH (NOLOCK)
WHERE ParentNavMenuID IN (SELECT NavMenuID FROM #NavMenuToDelete)
AND NavMenuID NOT IN (SELECT NavMenuID FROM #NavMenuToDelete)
END
IF @InIgnorePrivilege = 'N' BEGIN
SELECT @UnAuthorizedNum = Count(*)
FROM #NavMenuToDelete a LEFT OUTER JOIN Content_Authority_Producer b WITH (NOLOCK)
ON a.ContentAuthorityGroupID = b.ContentAuthorityGroupID
AND b.NavCreatorFlag = 'Y'
AND b.ContactID = @InContactID
WHERE b.ContentAuthorityGroupID IS NULL
IF @UnAuthorizedNum > 0 BEGIN
SET @OutErrorMessage = 'You are not allowed to delete this item, because there are descendants of this item you don''t have privileges to delete.'
RETURN
END
END
UPDATE Nav_Menu
SET WorkflowStatusCode = 'D'
WHERE NavMenuID IN (SELECT NavMenuID FROM #NavMenuToDelete)
DECLARE cContentToDelete CURSOR FOR
SELECT a.ContentID
FROM vCurrent_Content a WITH (NOLOCK), #NavMenuToDelete b
WHERE a.NavMenuID = b.NavMenuID
ORDER BY b.SortOrder
OPEN cContentToDelete
FETCH NEXT FROM cContentToDelete
INTO @ContentID
WHILE @@FETCH_STATUS = 0 BEGIN
EXEC amsp_CMDeleteContent @ContentID, @InContactID, 'N', NULL
FETCH NEXT FROM cContentToDelete
INTO @ContentID
END
CLOSE cContentToDelete
DEALLOCATE cContentToDelete
UPDATE #NavMenuToDelete
SET ContentCount = (SELECT COUNT(*) FROM vCurrent_Content WHERE NavMenuID = #NavMenuToDelete.NavMenuID)
DECLARE c_NavMenuToDelete CURSOR FOR
SELECT NavMenuID, ContentCount
FROM #NavMenuToDelete
OPEN c_NavMenuToDelete
FETCH NEXT FROm c_NavMenuToDelete
INTO @NavMenuID,
@ContentCount
WHILE @@FETCH_STATUS = 0 BEGIN
SET @ParentNavMenuID = NULL
SELECT @ParentNavMenuID = ParentNavMenuID
FROM Nav_Menu WITH (NOLOCK)
WHERE NavMenuID = @NavMenuID
AND ParentNavMenuID NOT IN (SELECT NavMenuID FROM #NavMenuToDelete)
IF @ContentCount = 0 BEGIN
UPDATE Content
SET NavMenuID = (SELECT NavMenuID FROM Nav_Menu WHERE Name = 'Content_Recycle_Bin')
WHERE NavMenuID = @NavMenuID
UPDATE Publish_Request
SET NavMenuID = NULL
WHERE NavMenuID = @NavMenuID
DELETE FROM Nav_Menu_Workflow_Log WHERE NavMenuID = @NavMenuID
DELETE FROM Nav_Menu_Feature WHERE NavMenuID = @NavMenuID
DELETE FROM Nav_Menu_Security_Group WHERE NavMenuID = @NavMenuID
DELETE FROM Nav_Menu_Setup_Log WHERE NavMenuID = @NavMenuID
DELETE FROM Nav_Menu WHERE NavMenuID = @NavMenuID
END
IF @ParentNavMenuID IS NOT NULL
EXEC amsp_CMUpdateNavProperties @ParentNavMenuID
FETCH NEXT FROm c_NavMenuToDelete
INTO @NavMenuID, @ContentCount
END
CLOSE c_NavMenuToDelete
DEALLOCATE c_NavMenuToDelete
END
GO
GRANT EXECUTE ON [dbo].[amsp_CMDeleteNavMenu] TO [IMIS]
GO